﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Text.RegularExpressions;
using System.Data.Sql;
using System.Data.SqlClient;
using BusinessLogicTier;
using DTO;

namespace QUANLYNHASACH
{
    public partial class FrmHangHoa : Form
    {
        HangHoaBUG objHH = new HangHoaBUG();

        DataTable tbHangHoa;
        DataSet dataset;

        string tacgia = "null", manxb = "null", maloai = "null", mansx = "null";

        public FrmHangHoa()
        {
            InitializeComponent();
        }

        private void FrmHangHoa_Load(object sender, EventArgs e)
        {
            Init();
            DinhDangLuoi();
            LoadComBoBox();
        }

        private void Init()
        {
            tbHangHoa = objHH.GetHH();
            dataGridView_HangHoa.DataSource = tbHangHoa;
            
            radioButton_Sach.Checked = true;

            txt_SoLuongTrungBay.Text = "0";
            txt_SoLuongTrongKho.Text = "0";
            txt_SoLuongTonKho.Text = "0";
            txt_GiaThanh.Text = "0";
            label_HienThiNXB.Text = null;
            label_HienThiLHH.Text = null;
            label_HienThiNSX.Text = null;

            txt_SoLuongTrungBay.Enabled = false;
            txt_SoLuongTrongKho.Enabled = false;
            txt_SoLuongTonKho.Enabled = false;
            txt_GiaThanh.Enabled = false;
        }

        private void LoadComBoBox()
        {
            comboBox_MaNXB.DataSource = objHH.GetNXB();
            comboBox_MaNXB.DisplayMember = "MANXB";
            comboBox_MaNXB.ValueMember = "MANXB";
            comboBox_MaNXB.SelectedIndex = -1;

            comboBox_MaLoai.DataSource = objHH.GetLHH();
            comboBox_MaLoai.DisplayMember = "MALOAI";
            comboBox_MaLoai.ValueMember = "MALOAI";
            comboBox_MaLoai.SelectedIndex = -1;

            comboBox_MaNSX.DataSource = objHH.GetNSX();
            comboBox_MaNSX.DisplayMember = "MANSX";
            comboBox_MaNSX.ValueMember = "MANSX";
            comboBox_MaNSX.SelectedIndex = -1;
        }

        // Hiển thị các chuyên mục trên datagridview
        private void DinhDangLuoi()
        {
            dataGridView_HangHoa.Columns[0].Width = 90;
            dataGridView_HangHoa.Columns[0].HeaderText = "Mã Hàng";
            dataGridView_HangHoa.Columns[1].Width = 102;
            dataGridView_HangHoa.Columns[1].HeaderText = "Tên Hàng";
            dataGridView_HangHoa.Columns[2].Width = 85;
            dataGridView_HangHoa.Columns[2].HeaderText = "Số Lượng Trưng Bày";
            dataGridView_HangHoa.Columns[3].Width = 85;
            dataGridView_HangHoa.Columns[3].HeaderText = "Số Lượng Trong Kho";
            dataGridView_HangHoa.Columns[4].Width = 85;
            dataGridView_HangHoa.Columns[4].HeaderText = "Số Lượng Tồn Kho";
            dataGridView_HangHoa.Columns[5].Width = 120;
            dataGridView_HangHoa.Columns[5].HeaderText = "Tác Giả";
            dataGridView_HangHoa.Columns[6].Width = 95;
            dataGridView_HangHoa.Columns[6].HeaderText = "Giá Thành";
            dataGridView_HangHoa.Columns[7].Width = 90;
            dataGridView_HangHoa.Columns[7].HeaderText = "Mã Nhà Xuất Bản";
            dataGridView_HangHoa.Columns[8].Width = 90;
            dataGridView_HangHoa.Columns[8].HeaderText = "Mã Loại";
            dataGridView_HangHoa.Columns[9].Width = 90;
            dataGridView_HangHoa.Columns[9].HeaderText = "Mã Nhà Sản Xuất";
            
            dataGridView_HangHoa.EnableHeadersVisualStyles = false;
            dataGridView_HangHoa.ColumnHeadersDefaultCellStyle.BackColor = Color.Cyan;
        }

        private void dataGridView_HangHoa_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            try
            {
                DataGridViewRow row = new DataGridViewRow();
                row = dataGridView_HangHoa.Rows[e.RowIndex];
                txt_MaHang.Text = row.Cells[0].Value.ToString().Trim();
                txt_TenHang.Text = row.Cells[1].Value.ToString().Trim();
                txt_SoLuongTrungBay.Text = row.Cells[2].Value.ToString().Trim();
                txt_SoLuongTrongKho.Text = row.Cells[3].Value.ToString().Trim();
                txt_SoLuongTonKho.Text = row.Cells[4].Value.ToString().Trim();
                txt_TacGia.Text = row.Cells[5].Value.ToString().Trim();
                txt_GiaThanh.Text = row.Cells[6].Value.ToString().Trim();
                comboBox_MaNXB.SelectedValue = row.Cells[7].Value.ToString().Trim();
                comboBox_MaLoai.SelectedValue = row.Cells[8].Value.ToString();
                comboBox_MaNSX.SelectedValue = row.Cells[9].Value.ToString().Trim();
                if (row.Cells[7].Value.ToString().Trim() == "null")
                {
                    radioButton_Sach.Checked = false;
                    radioButton_VPP.Checked = true;
                    KiemTraRadioChecked();
                }
                else
                {
                    radioButton_Sach.Checked = true;
                    radioButton_VPP.Checked = false;
                    KiemTraRadioChecked();
                }
            }
            catch (Exception)
            {
            }
        }

        private void KiemTraRadioChecked()
        {
            if (radioButton_Sach.Checked == true)
            {
                label_HienThiNSX.Text = "";
                comboBox_MaNSX.SelectedIndex = -1;
                comboBox_MaNSX.Enabled = false;
                txt_TacGia.Enabled = true;
                comboBox_MaNXB.Enabled = true;
                comboBox_MaLoai.Enabled = true;
            }
            else
            {
                label_HienThiNXB.Text = "";
                label_HienThiLHH.Text = "";
                comboBox_MaNXB.SelectedIndex = -1;
                comboBox_MaLoai.SelectedIndex = -1;
                comboBox_MaNSX.Enabled = true;
                txt_TacGia.Enabled = false;
                comboBox_MaNXB.Enabled = false;
                comboBox_MaLoai.Enabled = false;
            }
        }

        private void radioButton_Sach_CheckedChanged(object sender, EventArgs e)
        {
            KiemTraRadioChecked();
        }

        private void radioButton_VPP_CheckedChanged(object sender, EventArgs e)
        {
            KiemTraRadioChecked();
        }

        private void comboBox_MaNXB_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                dataset = objHH.GetTenNXB(comboBox_MaNXB.SelectedValue.ToString());
                label_HienThiNXB.Text = dataset.Tables[0].Rows[0]["TENNXB"].ToString();
            }
            catch (Exception)
            {
            }
            
        }

        private void comboBox_MaLoai_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                dataset = objHH.GetTenLHH(comboBox_MaLoai.SelectedValue.ToString().Trim());
                label_HienThiLHH.Text = dataset.Tables[0].Rows[0]["TENLOAI"].ToString().Trim();
            }
            catch (Exception)
            {
            }

        }

        private void comboBox_MaNSX_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                dataset = objHH.GetTenNSX(comboBox_MaNSX.SelectedValue.ToString().Trim());
                label_HienThiNSX.Text = dataset.Tables[0].Rows[0]["TENNSX"].ToString().Trim();
            }
            catch (Exception)
            {
            }

        }

        private void BTThem_Click(object sender, EventArgs e)
        {
            try
            {
                if (txt_MaHang.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_MaHang.Focus();
                    return;
                }
                if (txt_TenHang.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_TenHang.Focus();
                    return;
                }
                if (radioButton_Sach.Checked == true)
                {
                    if (txt_TacGia.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        txt_TacGia.Focus();
                        return;
                    }
                    if (comboBox_MaNXB.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        comboBox_MaNXB.Focus();
                        return;
                    }
                    if (comboBox_MaLoai.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        comboBox_MaLoai.Focus();
                        return;
                    }
                    tacgia = txt_TacGia.Text.Trim();
                    manxb = comboBox_MaNXB.SelectedValue.ToString().Trim();
                    maloai = comboBox_MaLoai.SelectedValue.ToString().Trim();
                    mansx = "null";
                }
                if (radioButton_VPP.Checked == true)
                {
                    if (comboBox_MaNSX.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        comboBox_MaNSX.Focus();
                        return;
                    }
                    tacgia = "null";
                    manxb = "null";
                    maloai = "null";
                    mansx = comboBox_MaNSX.SelectedValue.ToString();
                }
                if (objHH.kiemtranmanncc(txt_MaHang.Text.Trim()) == true)
                {
                    MessageBox.Show("Mã hàng đã tồn tại",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                    txt_MaHang.Focus();
                    return;
                }
                else
                {

                    int soluongtrungbay = Convert.ToInt32(txt_SoLuongTrungBay.Text.Trim());
                    int soluongtrongkho = Convert.ToInt32(txt_SoLuongTrongKho.Text.Trim());
                    int soluongtonkho = Convert.ToInt32(txt_SoLuongTonKho.Text.Trim());
                    int giathanh = Convert.ToInt32(txt_GiaThanh.Text);
                    HangHoa hh = new HangHoa(txt_MaHang.Text, txt_TenHang.Text, soluongtrungbay, soluongtrongkho, soluongtonkho, tacgia, giathanh, manxb, maloai, mansx);
                    if (objHH.Insert(hh) == true)
                    {
                        MessageBox.Show("Thêm dữ liệu thành công",
                        "Successfull",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        Refresh();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Không thể thêm dữ liệu", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void BTXoa_Click(object sender, EventArgs e)
        {
            if (txt_MaHang.Text.Trim() == "")
            {
                MessageBox.Show("Bạn chưa nhập mã hàng cần xóa",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                txt_MaHang.Focus();
                return;
            }
            if (objHH.kiemtranmanncc(txt_MaHang.Text) == false)
            {
                MessageBox.Show("Mã hàng không tồn tại trong Database",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error);
                txt_MaHang.Focus();
                return;
            }
            //Xóa dữ liệu bên bảng CHITIETHANGCC
            if (objHH.kiemtratontaiHH(txt_MaHang.Text.Trim()) == true)
                objHH.DeleteHH(txt_MaHang.Text.Trim());

            if (objHH.Delete(txt_MaHang.Text) == true)
            {
                MessageBox.Show("Xóa dữ liệu thành công",
                "Successfull",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                Refresh();
            }
        }

        private void BTSua_Click(object sender, EventArgs e)
        {
            try
            {
                if (txt_MaHang.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_MaHang.Focus();
                    return;
                }
                if (txt_TenHang.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_TenHang.Focus();
                    return;
                }
                if (radioButton_Sach.Checked == true)
                {
                    if (txt_TacGia.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        txt_TacGia.Focus();
                        return;
                    }
                    if (comboBox_MaNXB.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        comboBox_MaNXB.Focus();
                        return;
                    }
                    if (comboBox_MaLoai.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        comboBox_MaLoai.Focus();
                        return;
                    }
                    tacgia = txt_TacGia.Text.Trim();
                    manxb = comboBox_MaNXB.SelectedValue.ToString().Trim();
                    maloai = comboBox_MaLoai.SelectedValue.ToString().Trim();
                    mansx = "null";
                }
                if (radioButton_VPP.Checked == true)
                {
                    if (comboBox_MaNSX.Text.Trim() == "")
                    {
                        MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        comboBox_MaNSX.Focus();
                        return;
                    }
                    tacgia = "null";
                    manxb = "null";
                    maloai = "null";
                    mansx = comboBox_MaNSX.SelectedValue.ToString();
                }

                if (objHH.kiemtranmanncc(txt_MaHang.Text.Trim()) == false)
                {
                    MessageBox.Show("Mã hàng không tồn tại nên không thể cập nhật",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                    txt_MaHang.Focus();
                    return;
                }
                else
                {

                    //Update bên bảng CHITIETHANGCC 
                    DataTable tbHangCC = new DataTable();
                    tbHangCC = objHH.GetAllHangCC(txt_MaHang.Text.Trim());
                    int stt;
                    string mancc;
                    int count = tbHangCC.Rows.Count;
                    for (int i = 0; i < count; i++)
                    {
                        stt = Convert.ToInt32(tbHangCC.Rows[i]["STT"].ToString().Trim());
                        mancc = tbHangCC.Rows[i]["MANCC"].ToString().Trim();
                        objHH.UpdateHangCC(stt, mancc, txt_MaHang.Text.Trim(), txt_TenHang.Text.Trim());
                    }

                    int soluongtrungbay = Convert.ToInt32(txt_SoLuongTrungBay.Text.Trim());
                    int soluongtrongkho = Convert.ToInt32(txt_SoLuongTrongKho.Text.Trim());
                    int soluongtonkho = Convert.ToInt32(txt_SoLuongTonKho.Text.Trim());
                    int giathanh = Convert.ToInt32(txt_GiaThanh.Text);
                    HangHoa hh = new HangHoa(txt_MaHang.Text, txt_TenHang.Text, soluongtrungbay, soluongtrongkho, soluongtonkho, tacgia, giathanh, manxb, maloai, mansx);
                    if (objHH.Update(hh) == true)
                    {
                        MessageBox.Show("Cập nhật dữ liệu thành công",
                        "Successfull",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        Refresh();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Không thể cập nhật dữ liệu", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void Refresh()
        {
            txt_MaHang.Text = null;
            txt_TenHang.Text = null;
            txt_SoLuongTrungBay.Text = null;
            txt_SoLuongTrongKho.Text = null;
            txt_SoLuongTonKho.Text = null;
            txt_TacGia.Text = null;
            txt_GiaThanh.Text = null;
            comboBox_MaNXB.SelectedIndex = -1;
            comboBox_MaLoai.SelectedIndex = -1;
            comboBox_MaNSX.SelectedIndex = -1;
            label_HienThiNXB.Text = null;
            label_HienThiLHH.Text = null;
            label_HienThiNSX.Text = null;
            radioButton_Sach.Checked = false;
            radioButton_VPP.Checked = false;
            radioButton_MaHang.Checked = false;
            radioButton_TenHang.Checked = false;
            radioButton_TacGia.Checked = false;
            txt_TimKiem.Text = null;
            tbHangHoa = objHH.GetHH();
            dataGridView_HangHoa.DataSource = tbHangHoa;
        }

        private void BTRefresh_Click(object sender, EventArgs e)
        {
            Refresh();
        }

        private void BTThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void BTTimKiem_Click(object sender, EventArgs e)
        {
            if (radioButton_MaHang.Checked == false && radioButton_TenHang.Checked == false && radioButton_TacGia.Checked == false)
            {
                MessageBox.Show("Xin chọn hình thức tìm kiếm",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                return;
            }
            if (txt_TimKiem.Text.Trim() == "")
            {
                MessageBox.Show("Nhập thông tin cần tìm kiếm",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                txt_TimKiem.Focus();
                return;
            }
            if (radioButton_MaHang.Checked == true)
            {
                if (objHH.KiemTraTheoMa(txt_TimKiem.Text.Trim()) == false)
                {
                    MessageBox.Show("Mã hàng không tồn tại nên không thể tìm kiếm",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_TimKiem.Focus();
                    return;
                }
                else
                {
                    tbHangHoa = objHH.GetALLHHTheoMa(txt_TimKiem.Text.Trim());
                    dataGridView_HangHoa.DataSource = tbHangHoa;
                }
            }
            if (radioButton_TenHang.Checked == true)
            {
                if (objHH.KiemTraTheoTenHang(txt_TimKiem.Text.Trim()) == false)
                {
                    MessageBox.Show("Tên hàng không tồn tại nên không thể tìm kiếm",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_TimKiem.Focus();
                    return;
                }
                else
                {
                    tbHangHoa = objHH.GetALLHHTheoTenHang(txt_TimKiem.Text.Trim());
                    dataGridView_HangHoa.DataSource = tbHangHoa;
                }
            }
            if (radioButton_TacGia.Checked == true)
            {
                if (objHH.KiemTraTheoTacGia(txt_TimKiem.Text.Trim()) == false)
                {
                    MessageBox.Show("Tên hàng không tồn tại nên không thể tìm kiếm",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_TimKiem.Focus();
                    return;
                }
                else
                {
                    tbHangHoa = objHH.GetALLHHTheoTacGia(txt_TimKiem.Text.Trim());
                    dataGridView_HangHoa.DataSource = tbHangHoa;
                }
            }
        }

        private void dataGridView_HangHoa_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
